#ifndef  LTSH_H
#define  LTSH_H

#include    <stdio.h>
#include    <unistd.h>
#include    <stdlib.h>
#include    <string.h>
#include    <signal.h>
#include    <sys/types.h>

#define MAXLINE             4096
#define MAX_ARGS            128
#define MAX_JOBS            16

#define INPUT		0x0001
#define OUTPUT		0x0002 
#define APPEND		0x0004 
#define BACKGROUD	0x0008

static inline void set_bit(unsigned int nr, unsigned int *addr)
{
	*addr |= nr;
}

static inline int test_bit(unsigned int nr, unsigned int *addr)
{
	return (*addr & nr);
}

typedef struct _JobList
{
    pid_t       pid;
    char        *list[MAX_ARGS];
}JobList;

void	err_ret(const char *, ...);
void	err_sys(const char *, ...);
void	err_dump(const char *, ...);
void	err_msg(const char *, ...);
void	err_quit(const char *, ...);
void	err_exit(int, const char *, ...);

void lt_log(const char *, ...);

void pr_prompt();

void init_env();
void init_shell();

int builtin(char *command);
void do_builtin(char *list[]);

void parse_line(char buf[], char *list[], unsigned int *flagp);

void do_export(char *list[]);
void do_exit(char *list[]);
void do_cd(char *list[]);
void do_fg(char *list[]);
void do_fork(char *list[], unsigned int flag, JobList *job_list[]);

char **get_filename(char *list[]);

void free_list(char *list[]);

#endif  /*LTSH_H*/
